#!/usr/bin/env python
#-------------------------------python------------------------palle.py--#
#                                                                       #
#                         Palle in movimento                            #
#                                                                       #
#--Daniele Zambelli----------------------------------------------2003---#

from pycart import Plane

class Palla:
  def __init__(self, piano, x=0, y=0, raggio=0, vx=0, vy=0, colore='black'):
    """Crea una palla dati: posizione, raggio, velocita' e colore"""
    self.r=raggio
    self.vx=vx
    self.vy=vy
    self.p=piano
    self.c=piano.getcanvas()
    self.setbordo(x, y)
    self.o=self.c.create_oval(self.ax, self.ay, self.bx, self.by, fill=colore)

  def setbordo(self, x, y):
    """Calcola il rettangolo che conterra' la palla"""
    self.ax, self.ay = self.p._p2s((x-self.r, y-self.r))
    self.bx, self.by = self.p._p2s((x+self.r, y+self.r))
    
  def muovi(self):
    """ Muove la palla delle componenti la sua velocita'"""
    self.ax+=self.vx
    self.ay+=self.vy
    self.bx+=self.vx
    self.by+=self.vy
    self.c.coords(self.o, self.ax, self.ay, self.bx, self.by)
    self.c.update()

  def setv(self, vx, vy):
    """Modifica le componenti della velocita' della palla"""
    self.vx= vx
    self.vy=vy

  def setpos(self, x, y):
    """Sposta la palla in un punto del piano"""
    self.setbordo(x, y)
    self.c.coords(self.o, self.ax, self.ay, self.bx, self.by)
    self.c.update()
    
def test():
# Creo una piano con dimensioni 600x600
  p=Plane("Una Palla per Vittorio", 600, 600)
  
# Creo una palla rossa che parte in alto a sinistra e con velocita' (3, 2)
  palla1=Palla(p, raggio=20, x=-280, y=280, vx=3, vy=2, colore='red')

# Si muove di moto rettilineo uniforme per un tratto
  for i in range(200):
    palla1.muovi()
    p.after(1)

# Salta da una parte all'altra dello schermo, dove voglio io
  palla1.setpos(-50, -50)
  p.after(1000)
  palla1.setpos(50, -50)
  p.after(1000)
  palla1.setpos(50, 50)
  p.after(1000)
  palla1.setpos(-50, 50)
  p.after(1000)

# Cade con moto uniformemente accelerato
  palla1.setpos(0, 280)
  p.after(1000)
  for i in range(34):
    palla1.setv(0, i)
    palla1.muovi()
    p.after(10)

  p.mainloop()
  
if __name__ == "__main__":
   test()
